﻿
Imports System.Collections.ObjectModel   


Class CMConfigCatLiq

Private  fondoEnEdicionLIQ  As CFondo 
Private  fondoEnEdicionPORV As CFondo 
Private  fondoEnEdicionSAL  As CFondo 


Private operacionFecNoLab  As TipoOperacion

 Private Enum TipoOperacion

   ninguna = 0
   Alta    = 1
   Actualizacion = 2
   Baja = 2
 End Enum



Private Sub cargarFechasNoLab()
Dim negocioLiq As new CLiquidezServicio ()
Dim servGral   As new CServiciosGenerales ()


   Try           
      Me.grdFecNoLab.ItemsSource =  servGral.ObtenerFechasNoLab(1) '***********OPTIMIZAR PARÁAMETRO**********
      Me.grdFecNoLab.Items.Refresh () 
   Catch ex As Exception
            MessageBox.Show("Error TI500. No se pudo cargar los días no laborales debido a: " & ex.Message, "Carga de fondos", MessageBoxButton.OK, MessageBoxImage.Error)
   End Try

End Sub

Private Function  ObtenerCelda(ByRef miDataGrid As DataGrid, ByVal indexRow As Integer, ByVal indexCol As Integer  ) As DataGridCell 

Try
      Dim row as DataGridRow  = miDataGrid.ItemContainerGenerator.ContainerFromIndex(indexRow)            
      Dim cellContent As Object  = miDataGrid.Columns(indexCol).GetCellContent(row)     
 
      Dim objDepend As DependencyObject = cellContent
      Dim celda As DataGridCell = Nothing       

       While not objDepend is Nothing 

            If objDepend.GetType().Name = "DataGridCell" then 
               celda = objDepend           
               Return celda                                                      
            End If
           objDepend = VisualTreeHelper.GetParent (objDepend)   
      End While
Catch ex As Exception
    Throw ex
End Try

Return Nothing 
End Function




Private Sub CargarFondosLIQ()
   Dim negocioLiq As new CLiquidezServicio ()
   
   Try           
      Me.grdFondosLIQ.ItemsSource =  negocioLiq.obtenerFondos (CDefinicionesGrales.TiposFondo.FondoLiquidez)
      Me.grdFondosLIQ.Items.Refresh () 
   Catch ex As Exception
            MessageBox.Show("Error TI500. No se pudo cargar los fondos debido a: " & ex.Message, "Carga de fondos", MessageBoxButton.OK, MessageBoxImage.Error)
   End Try
     
End Sub





Private Sub grdFondosLIQ_CellEditEnding(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdFondosLIQ.CellEditEnding          
   

        Dim fondos As ObservableCollection(Of CFondo) = grdFondosLIQ.ItemsSource
        Dim fondoActual As CFondo
        Dim fondoCambio As New CFondo ()
      

        Dim negocio As New CLiquidezServicio 
                       
        
        Select Case e.EditAction

            Case DataGridEditAction.Commit

              If not sender.CurrentItem is Nothing then

                    Dim txtContenidoCelda As Object   = grdFondosLIQ.Columns(0).GetCellContent(grdFondosLIQ.CurrentItem)         
                    fondoActual = TryCast(grdFondosLIQ.CurrentCell.Item, CFondo)

                    If fondoActual.Equals (fondoEnEdicionLIQ) = False then 
                         CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
                    End If
                                        

                    fondoCambio.idNombre = txtContenidoCelda.Text 
                    fondoCambio.EsEditableNuevo = fondoActual.EsEditableNuevo  
                    fondoCambio.Tipo = CDefinicionesGrales.TiposFondo.FondoLiquidez   
                    


                    If fondoCambio.EsEditableNuevo Then
                        Try
                           fondoCambio.EsEditableNuevo = False 
                           negocio.GuardarFondoNuevo (fondoCambio,CDefinicionesGrales.TiposFondo.FondoLiquidez ) 
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo """ & fondoCambio.idNombre & ": " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try                   
                    else

                        Try
                           negocio.ActualizarFondo (fondoActual, fondoCambio)
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo """ & fondoCambio.idNombre & ": " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try 

                    End If
               else
                  CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
               End If

            Case DataGridEditAction.Cancel
                 
                fondoCambio  = TryCast(grdFondosLIQ.Items(grdFondosLIQ.Items.Count - 1),CFondo)
                
                if fondoCambio.EsEditableNuevo then 
                   fondos.Remove(fondoCambio  )                    
                    grdFondosLIQ.UpdateLayout()                          
                End If


        End Select


        fondoEnEdicionLIQ = Nothing 

    End Sub

Private Sub grdFondosLIQ_BeginningEdit(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdFondosLIQ.BeginningEdit
   fondoEnEdicionLIQ = grdFondosLIQ.CurrentItem  
End Sub

Private Sub btnEliminarLIQ_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnEliminarLIQ.Click 

 Dim fondos As ObservableCollection(Of CFondo ) = grdFondosLIQ.ItemsSource
 Dim fondoElim As new ObservableCollection(Of CFondo )
 Dim fondoNoElim As new ObservableCollection(Of CFondo )

 Dim nomFondosNoElim As new System.Text.StringBuilder ()

 Dim negocio As New CLiquidezServicio 

  If grdFondosLIQ.SelectedCells.Count > 0 then
     If MessageBox.Show ("Esta seguro que desea eliminar las celdas seleccionadas","Eliminar fondos",MessageBoxButton.OKCancel,MessageBoxImage.Question ) =MessageBoxResult.OK then 
     

     
     For Each celda As DataGridCellInfo In grdFondosLIQ.SelectedCells                                
        fondoElim.Add (CType(celda.Item,CFondo ))       
     Next

     For Each fondo As CFondo In fondoElim 
        If negocio.EliminarFondo (fondo) then 
            fondos.Remove(fondo)
         else
            fondoNoElim.Add (fondo)
        End If
                                         
     Next

  End If
  End If

 grdFondosLIQ.UpdateLayout ()


 If fondoNoElim.Count > 0 then             
    For Each fondo As  CFondo  In fondoNoElim 
        nomFondosNoElim.Append (fondo.idNombre)
         nomFondosNoElim.Append (", ")
    Next

    MessageBox.Show ("Los fondos: " & nomFondosNoElim.ToString () & " no pudieron ser eliminados.", "Eliminar fondos",MessageBoxButton.OK,MessageBoxImage.Exclamation ) 

 End If



End Sub

Private Sub btnAgregarLIQ_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles btnAgregarLIQ.Click 

  Dim regNvo As new CFondo("Escriba aqui...",CDefinicionesGrales.TiposFondo.FondoLiquidez,true)
  
  Dim lstFondos As new ObservableCollection (Of CFondo )
          
   lstFondos = grdFondosLIQ.ItemsSource 
   lstFondos.Add (regNvo)             
   grdFondosLIQ.ScrollIntoView (grdFondosLIQ.Items(grdFondosLIQ.Items.Count-1))
   grdFondosLIQ.UpdateLayout()
  

  Dim celda As DataGridCell  = ObtenerCelda (grdFondosLIQ,grdFondosLIQ.Items.Count-1,0)
  If Not celda is Nothing 
    celda.Focus()
    grdFondosLIQ.BeginEdit () 
    celda.IsSelected = true    
  End If

End Sub














Private Sub CargarFondosPORV()
   Dim negocioLiq As new CLiquidezServicio ()   
   Try        
             
      Me.grdFondosPORV.ItemsSource =  negocioLiq.obtenerFondos (CDefinicionesGrales.TiposFondo.FondoPorvenir)
      Me.grdFondosPORV.Items.Refresh () 
   Catch ex As Exception
            MessageBox.Show("Error TI500. No se pudo cargar los fondos debido a:" & ex.Message, "Carga de fondos", MessageBoxButton.OK, MessageBoxImage.Error)
   End Try
     
End Sub

Private Sub grdFondosPORV_BeginningEdit(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdFondosPORV.BeginningEdit
   fondoEnEdicionPORV = grdFondosPORV.CurrentItem  
End Sub

Private Sub grdFondosPORV_CellEditEnding(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdFondosPORV.CellEditEnding          
     
 Dim fondos As ObservableCollection(Of CFondo) = grdFondosPORV.ItemsSource
        Dim fondoActual As CFondo
        Dim fondoCambio As New CFondo ()
      

        Dim negocio As New CLiquidezServicio 
                       
        
        Select Case e.EditAction

            Case DataGridEditAction.Commit

              If not sender.CurrentItem is Nothing then

                    Dim txtContenidoCelda As Object   = grdFondosPORV.Columns(0).GetCellContent(grdFondosPORV.CurrentItem)         
                    fondoActual = TryCast(grdFondosPORV.CurrentCell.Item, CFondo)

                    If fondoActual.Equals (fondoEnEdicionPORV) = False then 
                         CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
                    End If
                                        

                    fondoCambio.idNombre = txtContenidoCelda.Text 
                    fondoCambio.EsEditableNuevo = fondoActual.EsEditableNuevo  
                    fondoCambio.Tipo = CDefinicionesGrales.TiposFondo.FondoPorvenir   
                    

                    If fondoCambio.EsEditableNuevo Then
                        Try
                           fondoCambio.EsEditableNuevo = False 
                           negocio.GuardarFondoNuevo (fondoCambio,CDefinicionesGrales.TiposFondo.FondoPorvenir ) 
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo """ & fondoCambio.idNombre & ": " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try                   
                    else

                        Try
                           negocio.ActualizarFondo (fondoActual, fondoCambio)
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo """ & fondoCambio.idNombre & ": " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try 

                    End If
               else
                  CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
               End If

            Case DataGridEditAction.Cancel
                 
                fondoCambio  = TryCast(grdFondosPORV.Items(grdFondosPORV.Items.Count - 1),CFondo)
                
                if fondoCambio.EsEditableNuevo then 
                   fondos.Remove(fondoCambio  )                    
                    grdFondosPORV.UpdateLayout()                          
                End If


        End Select


        fondoEnEdicionPORV = Nothing 


End Sub

Private Sub btnAgregarPORV_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnAgregarPORV.Click 
Dim regNvo As new CFondo("Escriba aqui...",CDefinicionesGrales.TiposFondo.FondoPorvenir ,true)
  
  Dim lstFondos As new ObservableCollection (Of CFondo )
          
   lstFondos = grdFondosPORV.ItemsSource 
   lstFondos.Add (regNvo)             
   grdFondosPORV.ScrollIntoView (grdFondosPORV.Items(grdFondosPORV.Items.Count-1))
   grdFondosPORV.UpdateLayout()
  

  Dim celda As DataGridCell  = ObtenerCelda (grdFondosPORV,grdFondosPORV.Items.Count-1,0)
  If Not celda is Nothing 
    celda.Focus()
    grdFondosPORV.BeginEdit () 
    celda.IsSelected = true    
  End If
End Sub

Private Sub btnEliminarPORV_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnEliminarPORV.Click 
Dim fondos As ObservableCollection(Of CFondo ) = grdFondosPORV.ItemsSource
 Dim fondoElim As new ObservableCollection(Of CFondo )
 Dim fondoNoElim As new ObservableCollection(Of CFondo )

 Dim nomFondosNoElim As new System.Text.StringBuilder ()

 Dim negocio As New CLiquidezServicio 

  If grdFondosPORV.SelectedCells.Count > 0 then
     If MessageBox.Show ("Esta seguro que desea eliminar las celdas seleccionadas","Eliminar fondos",MessageBoxButton.OKCancel,MessageBoxImage.Question ) =MessageBoxResult.OK then 
     

     
     For Each celda As DataGridCellInfo In grdFondosPORV.SelectedCells                                
        fondoElim.Add (CType(celda.Item,CFondo ))       
     Next

     For Each fondo As CFondo In fondoElim 
        If negocio.EliminarFondo (fondo) then 
            fondos.Remove(fondo)
         else
            fondoNoElim.Add (fondo)
        End If
                                         
     Next

  End If
  End If

 grdFondosPORV.UpdateLayout ()


 If fondoNoElim.Count > 0 then             
    For Each fondo As  CFondo  In fondoNoElim 
        nomFondosNoElim.Append (fondo.idNombre)
         nomFondosNoElim.Append (", ")
    Next

    MessageBox.Show ("Los fondos: " & nomFondosNoElim.ToString () & " no pudieron ser eliminados.", "Eliminar fondos",MessageBoxButton.OK,MessageBoxImage.Exclamation ) 

 End If

End Sub


Private Sub CargarFondosSAL()
   Dim negocioLiq As new CLiquidezServicio ()   
   Try        
             
      Me.grdFondosSAL.ItemsSource =  negocioLiq.obtenerFondos (CDefinicionesGrales.TiposFondo.FondoSaldos )
      Me.grdFondosSAL.Items.Refresh () 
   Catch ex As Exception
            MessageBox.Show("Error TI500. No se pudo cargar los fondos debido a:" & ex.Message, "Carga de fondos", MessageBoxButton.OK, MessageBoxImage.Error)
   End Try
     
End Sub

Private Sub grdFondosSAL_BeginningEdit(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdFondosSAL.BeginningEdit
   fondoEnEdicionSAL = grdFondosSAL.CurrentItem  
End Sub

Private Sub grdFondos_CellEditEnding(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdFondosSAL.CellEditEnding          
   
     Dim fondos As ObservableCollection(Of CFondo) = grdFondosSAL.ItemsSource
        Dim fondoActual As CFondo
        Dim fondoCambio As New CFondo ()
      

        Dim negocio As New CLiquidezServicio 
                       
        
        Select Case e.EditAction

            Case DataGridEditAction.Commit

              If not sender.CurrentItem is Nothing then

                    Dim txtContenidoCelda As Object   = grdFondosSAL.Columns(0).GetCellContent(grdFondosSAL.CurrentItem)         
                    fondoActual = TryCast(grdFondosSAL.CurrentCell.Item, CFondo)

                    If fondoActual.Equals (fondoEnEdicionSAL) = False then 
                         CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
                    End If
                                        

                    fondoCambio.idNombre = txtContenidoCelda.Text 
                    fondoCambio.EsEditableNuevo = fondoActual.EsEditableNuevo  
                    fondoCambio.Tipo = CDefinicionesGrales.TiposFondo.FondoSaldos 
                    

                    If fondoCambio.EsEditableNuevo Then
                        Try
                           fondoCambio.EsEditableNuevo = False 
                           negocio.GuardarFondoNuevo (fondoCambio,CDefinicionesGrales.TiposFondo.FondoSaldos ) 
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo """ & fondoCambio.idNombre & ": " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try                   
                    else

                        Try
                           negocio.ActualizarFondo (fondoActual, fondoCambio)
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo """ & fondoCambio.idNombre & ": " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try 

                    End If
               else
                  CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
               End If

            Case DataGridEditAction.Cancel
                 
                fondoCambio  = TryCast(grdFondosSAL.Items(grdFondosSAL.Items.Count - 1),CFondo)
                
                if fondoCambio.EsEditableNuevo then 
                   fondos.Remove(fondoCambio  )                    
                    grdFondosSAL.UpdateLayout()                          
                End If


        End Select


        fondoEnEdicionSAL = Nothing 



End Sub

Private Sub btnAgregarSAL_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnAgregarSAL.Click 
  
  Dim regNvo As new CFondo("Escriba aqui...",CDefinicionesGrales.TiposFondo.FondoSaldos,true)  
  Dim lstFondos As new ObservableCollection (Of CFondo )
          
   lstFondos = grdFondosSAL.ItemsSource 
   lstFondos.Add (regNvo)             
   grdFondosSAL.ScrollIntoView (grdFondosSAL.Items(grdFondosSAL.Items.Count-1))
   
   grdFondosSAL.UpdateLayout()
  

  Dim celda As DataGridCell  = ObtenerCelda (grdFondosSAL,grdFondosSAL.Items.Count-1,0)
  If Not celda is Nothing 
    celda.Focus()
    grdFondosSAL.BeginEdit () 
    celda.IsSelected = true    
  End If
End Sub

Private Sub btnEliminarSAL_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnEliminarSAL.Click 
 Dim fondos As ObservableCollection(Of CFondo ) = grdFondosSAL.ItemsSource
 Dim fondoElim As new ObservableCollection(Of CFondo )
 Dim fondoNoElim As new ObservableCollection(Of CFondo )

 Dim nomFondosNoElim As new System.Text.StringBuilder ()

 Dim negocio As New CLiquidezServicio 

  If grdFondosSAL.SelectedCells.Count > 0 then
     If MessageBox.Show ("Esta seguro que desea eliminar las celdas seleccionadas","Eliminar fondos",MessageBoxButton.OKCancel,MessageBoxImage.Question ) =MessageBoxResult.OK then 
     

     
     For Each celda As DataGridCellInfo In grdFondosSAL.SelectedCells                                
        fondoElim.Add (CType(celda.Item,CFondo ))       
     Next

     For Each fondo As CFondo In fondoElim 
        If negocio.EliminarFondo (fondo) then 
            fondos.Remove(fondo)
         else
            fondoNoElim.Add (fondo)
        End If
                                         
     Next

  End If
  End If

 grdFondosSAL.UpdateLayout ()


 If fondoNoElim.Count > 0 then             
    For Each fondo As  CFondo  In fondoNoElim 
        nomFondosNoElim.Append (fondo.idNombre)
         nomFondosNoElim.Append (", ")
    Next

    MessageBox.Show ("Los fondos: " & nomFondosNoElim.ToString () & " no pudieron ser eliminados.", "Eliminar fondos",MessageBoxButton.OK,MessageBoxImage.Exclamation ) 

 End If


End Sub





Public Sub New()               
   InitializeComponent()        
   CargarFondosLIQ()
   CargarFondosPORV()
   CargarFondosSAL()
   cargarFechasNoLab ()           

    operacionFecNoLab  = TipoOperacion.ninguna  
   Mouse.OverrideCursor = Nothing       
 
End Sub




Private Sub InicializarEstadoFecNoLab()

    Me.Calendario.IsEnabled = False 
    Me.grdFecNoLab.IsEnabled = True
  
    Me.Calendario.DisplayDate  = Date.Today 
    Me.Calendario.SelectedDate = Nothing

    me.grdFecNoLab.SelectedItem = Nothing    

    btnActualizarFecNoLAb.IsEnabled = true
    btnEliminarFecNoLAb.IsEnabled = true 
    btnAltaFecNoLAb.IsEnabled = True 


    Me.btnAceptar.Visibility =Visibility.Collapsed   
    Me.btnCancelar.Visibility =Visibility.Collapsed  

    operacionFecNoLab = TipoOperacion.ninguna 

End Sub


Private Sub grdFecNoLab_SelectionChanged(ByVal sender As System.Object , ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles grdFecNoLab.SelectionChanged



    If Not chkEliminacionMasiva.IsChecked then

             Dim FecNoLab As  CFechaNoLab
       
             FecNoLab = Me.grdFecNoLab.SelectedItem  

             If not FecNoLab is Nothing  then 
    
                Me.Calendario.DisplayDate = FecNoLab.Fechanolab 
                Me.Calendario.SelectedDate = FecNoLab.Fechanolab 
                Me.Calendario.UpdateLayout ()

              Else
   
                 Me.Calendario.DisplayDate = Date.Today 
                 Me.Calendario.SelectedDate = Nothing 
                 Me.Calendario.UpdateLayout ()

             End If
    End If 

 

End Sub


Private Sub btnAltaFecNoLAb_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnAltaFecNoLAb.Click 

    Me.Calendario.IsEnabled = True 
   
    Me.Calendario.DisplayDate  = Date.Today 
    Me.Calendario.SelectedDate =  Nothing 
    Me.Calendario.UpdateLayout ()
    Me.grdFecNoLab.IsEnabled =False
  
    btnActualizarFecNoLAb.IsEnabled = False 
    btnEliminarFecNoLAb.IsEnabled = False 

    Me.btnAceptar.Visibility =Visibility.Visible  
    Me.btnCancelar.Visibility =Visibility.Visible   


    operacionFecNoLab = TipoOperacion.Alta  



End Sub

 
Private Sub btnActualizarSAL_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnActualizarFecNoLAb .Click 
   
   

   If grdFecNoLab.SelectedItem is Nothing  then
      MessageBox.Show ("Necesita seleccionar una fecha", "Fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Exclamation)
      Exit sub
   End If

    Me.Calendario.IsEnabled = True    
        
    btnAltaFecNoLAb.IsEnabled = False 
    btnEliminarFecNoLAb.IsEnabled = False  

    Me.btnAceptar.Visibility =Visibility.Visible  
    Me.btnCancelar.Visibility =Visibility.Visible 
  

      operacionFecNoLab = TipoOperacion.Actualizacion 

End Sub


Private Sub btnEliminarFecNoLAb_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnEliminarFecNoLAb .Click 

  Dim negocio   As New CLiquidezServicio () 
  Dim smsgError As String = ""


   If grdFecNoLab.SelectedItem is Nothing  then
      MessageBox.Show ("Necesita seleccionar una fecha", "Fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Exclamation)
      Exit sub
   End If

   If MessageBox.Show ("¿Esta seguro que desea eliminar la fecha seleccionada?","Fechas no laborales",MessageBoxButton.YesNo,MessageBoxImage.Question) = MessageBoxResult.Yes then        
        Try
        
           Dim fechaSelect  As CFechaNoLab = Me.grdFecNoLab.SelectedItem                       
            
           If negocio.EliminarFechaNoLab(fechaSelect.Fechanolab,smsgError)=True     then 
              MessageBox.Show ("Eliminación exitosa", "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Information ) 
           Else 
              MessageBox.Show ("No se pudo eliminar la fecha seleccionada debido a: " & smsgError, "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Error)
           End If
           InicializarEstadoFecNoLab()
           cargarFechasNoLab() 
        Catch ex As Exception
                MessageBox.Show("Error TI500. Ocurrió un error en el proceso de eliminación, salga de la pagina actual y vuelva a entrar para verificar sí la operación concluyó ( " & ex.Message & ").", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try

   End If


End Sub


Private Sub btnCancelar_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnCancelar.Click 
    InicializarEstadoFecNoLab()
End Sub


Private Sub btnAceptar_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnAceptar.Click 
 Dim negocio   As New CLiquidezServicio () 


 Dim smsgError As String = ""
  
Try


  Select Case  operacionFecNoLab

     Case TipoOperacion.Alta  
          Dim fechaSelect As Date = Me.Calendario.SelectedDate  
          Dim lstFechasNoLab As List(Of CFechaNoLab) = Me.grdFecNoLab.ItemsSource

           if  negocio.AltaFechaNoLab (fechaSelect,sMsgError) = True then
               'cargarFechasNoLab()
               
               lstFechasNoLab.Add (New CFechaNoLab(fechaSelect))                      
               Me.grdFecNoLab.ItemsSource = lstFechasNoLab               
               Me.grdFecNoLab.Items.Refresh 
                 
               MessageBox.Show ("Alta exitosa", "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Information ) 
           Else  
              MessageBox.Show ("No se pudo dar de alta la nueva fecha debido a: " & smsgError, "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Error)
           End If
         

            InicializarEstadoFecNoLab()

     Case TipoOperacion.Actualizacion   
           Dim fecNvaNoLab  As Date = Me.Calendario.SelectedDate  
           Dim fechaSelect  As CFechaNoLab = Me.grdFecNoLab.SelectedItem  
                     
            
           If negocio.ActualizarFechaNoLab(fechaSelect.Fechanolab ,fecNvaNoLab,smsgError) = True then 
              MessageBox.Show ("Actualización exitosa", "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Information ) 
           Else 
              MessageBox.Show ("No se pudo actualizar la fecha debido a: " & smsgError, "Fechas no laborales",MessageBoxButton.OK,MessageBoxImage.Error)
           End If
           InicializarEstadoFecNoLab()
           
           cargarFechasNoLab()
           Dim lstFechasNoLab As List(Of CFechaNoLab) = Me.grdFecNoLab.ItemsSource           
           Dim fecha As  CFechaNoLab

           Fecha =  lstFechasNoLab.Find ( Function(x) x.Fechanolab.Equals (fecNvaNoLab))
           
           Me.grdFecNoLab.SelectedItem = Fecha
               
           Me.grdFecNoLab.ScrollIntoView (Me.grdFecNoLab.SelectedItem)
           Me.grdFecNoLab.UpdateLayout()

           
        
  End Select

   

Catch ex As Exception
    InicializarEstadoFecNoLab()
    
     Select Case  operacionFecNoLab

     Case TipoOperacion.Alta         
                    MessageBox.Show("Error TI500. Ocurrió un error en el proceso de alta, salga de la pagina actual y vuelva a entrar para verificar si la operación concluyó ( " & ex.Message & ").", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
     Case TipoOperacion.Actualizacion   
                    MessageBox.Show("Error TI500. Ocurrió un error en el proceso de actualización, salga de la pagina actual y vuelva a entrar para verificar sí la operación concluyó ( " & ex.Message & ").", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
     Case Else 
                    MessageBox.Show("Error TI500. Ocurrió un error:   " & ex.Message & ".", "Fechas no laborales", MessageBoxButton.OK, MessageBoxImage.Error)
  End Select 
   

End Try



End Sub

    
Private Sub chkEliminacionMasiva_Checked(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles chkEliminacionMasiva.Checked
   bdrOperaIndividual.Visibility = Windows.Visibility.Collapsed  
   btnEliminarMasivaFecNoLAb.Visibility  = Windows.Visibility.Visible  
   grdFecNoLab.SelectionMode =DataGridSelectionMode.Extended  
End Sub


Private Sub chkEliminacionMasiva_Unchecked(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles chkEliminacionMasiva.Unchecked
   bdrOperaIndividual.Visibility = Windows.Visibility.Visible  
   btnEliminarMasivaFecNoLAb.Visibility  = Windows.Visibility.Hidden 
   grdFecNoLab.SelectionMode =DataGridSelectionMode.Single  

End Sub


Private Sub btnEliminarMasivaFecNoLAb_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnEliminarMasivaFecNoLAb.Click 
Dim negocio      As New  CLiquidezServicio ()
Dim sMsgError    As String = ""

     

   If grdFecNoLab.SelectedItems.Count <= 0 then 
      MessageBox.Show ("Necesita seleccionar almenos una fecha.", "Fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Information) 
      Exit Sub 
   End If

  Dim lst As  Object  = grdFecNoLab.SelectedItems

   If (negocio.EliminacionMasivaDeFechasNoLab (lst,sMsgError)) = True then 
      MessageBox.Show ("La eliminación de fechas fue exitosa.", "Fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Information) 
   Else 
      MessageBox.Show ("Ocurrió un error en el proceso de eliminación: " & sMsgError & ".", "Fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Error) 
   End If
   cargarFechasNoLab()


End Sub







'CARGA MASIVA DE FECHAS NO LABORALES



Private Function  AgregarMenuContextual() As ContextMenu 
  Dim miMenuContextual     As New ContextMenu
  Dim mnuCopia             As new System.Windows.Controls.MenuItem 
  Dim mnuPegar             As new System.Windows.Controls.MenuItem


 
   mnuPegar.Header = "Pegar"  
   miMenuContextual.Items.Add(mnuPegar)
   AddHandler mnuPegar.Click,AddressOf  mnuPegar_click 

 

 Return miMenuContextual 

End Function

Private Sub mnuPegar_click(sender As Object, e As RoutedEventArgs)
 Try
    pegarDatos(Me.grdFecNoLabMasiva )           
 Catch ex As Exception
            MessageBox.Show("Error TI500. " & ex.Message, "Pegar celdas", MessageBoxButton.OK, MessageBoxImage.Exclamation)
 End Try
   
End Sub 
 
Private Sub pegarDatos(ByRef gridDeDatos As DataGrid)
'El formato de la carga masiva para las fechas no laborales es: 
'1) Una sola columna y "n" renglones
'2) Cada renglon tiene el siguiente formato: "yyyy-MM-dd" o "yyyy/MM/dd" ej. 2013-02-17 o 2013/02/17


Dim lstInterAux As New  List(Of CFechaNoLab )  
Dim datos    As CDatosEnFormatoX 
Dim i        As Integer = 0
Dim nErrores As Integer = 0


datos = CUtileria.ObtenerDatosClipboard (vblf ,vbTab)

'1) Validaciones: obtener información del portapapeles

   If datos.Datos.length = 0 then 
      Exit sub
   End If


  If datos is Nothing then 
     MessageBox.Show ("No se pudo copiar los datos") 
     gridDeDatos.CancelEdit (DataGridEditingUnit.Cell)         
     Exit Sub 
  End If

'2) Validaciones: compatibilidad  
  

  For i = 0 to datos.NumeroRenglones - 1 
      Try
          Dim sFecha As String = datos.Datos(i)(0)
          Dim fecha As New Date (sFecha.Substring(0,4),sFecha.Substring(5,2) ,sFecha.Substring(8,2))
          lstInterAux.Add (new CFechaNoLab (fecha))
      Catch ex As Exception
            nErrores += 1
      End Try           
  Next

  If nErrores > 0 then 
     If MessageBox.Show ("Existen " & nErrores  & " datos erróneos de " & datos.NumeroRenglones & ". ¿Desea pegar los datos correctos solamente?", "Carga masiva de fechas no laborales",MessageBoxButton.YesNo,MessageBoxImage.Question) = MessageBoxResult.Yes then 
        grdFecNoLabMasiva.ItemsSource = lstInterAux  
     End If

   Else
       grdFecNoLabMasiva.ItemsSource = lstInterAux  
  End If

  grdFecNoLabMasiva.Items.Refresh () 

End Sub




Private Sub grdFecNoLabMasiva_MouseRightButtonUp(ByVal sender As System.Object , ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles grdFecNoLabMasiva.MouseRightButtonUp
     grdFecNoLabMasiva.ContextMenu =   AgregarMenuContextual() 
  
End Sub

Private Sub btnCargarFechas_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnCargarFechas.Click

Dim negocio        As New CLiquidezServicio ()
Dim lstFechasCarga As List(Of CFechaNoLab )
Dim incorrectos    As Integer = 0
Dim sMsgError      As String = ""
    

      Mouse.OverrideCursor = Cursors.Wait


      '1) Eliminar repetidos.
     
     If grdFecNoLabMasiva.Items.Count <= 0 then 
        MessageBox.Show ("Necesita registrar almenos una fecha","Carga masiva de fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Exclamation)
        Mouse.OverrideCursor = Nothing 
        Exit sub
     End If

     lstFechasCarga = grdFecNoLabMasiva.ItemsSource  

     incorrectos = negocio.CargaMasivaFechasNoLab (lstFechasCarga,sMsgError)       

     If incorrectos >= 0 then 
         MessageBox.Show("Se procesaron: " & lstFechasCarga.Count & " registros de los cuales " & incorrectos & " fueron incorrectos.", "Carga masiva de fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Information )  
         cargarFechasNoLab() 
     Else
         MessageBox.Show("Se produjo el siguiente error: " & sMsgError & ".", "Carga masiva de fechas no laborales", MessageBoxButton.OK,MessageBoxImage.Error)  
     End If
      

     Mouse.OverrideCursor = Nothing 



End Sub

Private Sub btnLimpiar_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles btnLimpiar.Click

   Mouse.OverrideCursor = Cursors.Wait  
   grdFecNoLabMasiva.ItemsSource = Nothing 
   grdFecNoLabMasiva.Items.Refresh () 
   Mouse.OverrideCursor = Nothing 

End Sub


End Class
